feedback-neuron applies first the list-of-input-patterns to a neuron, and then feeds the output of this neuron back to itself. The iteration is repeated n times, and the output is returned as a list of lists, in succession of the neural outputs at each iteration.
If you have a single input neurons, call feedback-neuron this way:
(setq results
(feedback-neuron 'rules 5 (list source)))
Depending on the how many inputs the neuron is processing, you should supply that amount of inputs, for example if 'rules have 3 inputs, you should supply the initial neuron inputs in the following way:
(setq results
(feedback-neuron 'rules 5 (list nil nil source)))
; in1 in2 in3
What happens when you feedback a neuron with multiple inputs. In the feedback process, the neuron processes the following inputs, and adds the output to a input 3.
; ITERATIONS INPUTS OUTPUT
; 1 2 3
; 1 nil nil chunk1 --> out1
; 2 nil chunk1 out1 --> out2
; 3 chunk1 out1 out2 --> out3
; 4 out1 out2 out3 --> out4
; 5 out2 out3 out4 --> out5
If you examine the process, you'll notice it is the same procedure as when one is writing fugues or canons for 4 instruments. The resulting machinery is actually a kind of cellular automata, reacting to previous stages and producing new forms based on a set of rules.
(defun feedback-neuron (name n inputs)
(let ((out nil) (collect nil))
(dotimes (i n)
(setq out (apply 'run-neuron (append (list name) inputs)))